package cn.sky.demo.task;

import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * @author sky
 * @date 2025年09月17日 11:21
 * @description
 *
 * Cron表达式参数参考：
 *
 * 秒（0~59） 例如0/5表示每5秒
 * 分（0~59）
 * 时（0~23）
 * 日（0~31）的某天，需计算
 * 月（0~11）
 * 周几（ 可填1-7 或 SUN/MON/TUE/WED/THU/FRI/SAT）
 *
 * 建议：直接在线生成Cron表达式比较方便：www.matools.com/cron/
 *
 * @since 1.0.0
 */
//@Component
@EnableScheduling
@Slf4j
public class ScheduleTask{
    /**
     * 定时任务
     *
     * @Scheduled：除了支持灵活的参数表达式cron之外，还支持 fixedDelay，fixedRate，initialDelay 这些延时性的操作。
     */
    @Scheduled(cron = "0/5 * * * * ?") //定时任务注解+cron表达式
    @Async
    public void testScheduleTask() {
        log.info("定时任务执行了"+ LocalDateTime.now());
    }

    @Scheduled(cron = "0/5 * * * * ?") //定时任务注解+cron表达式
    @Async
    public void testScheduleTask1() throws InterruptedException {
        log.info("执行定时任务1 " + LocalDateTime.now());
        Thread.sleep(10 * 1000);
    }

    @Scheduled(cron = "0/5 * * * * ?") //定时任务注解+cron表达式
    @Async
    public void testScheduleTask2() {
        log.info("执行定时任务2 " + LocalDateTime.now());
    }
}
